<?php

namespace App\Services;

use \App\Helpers\LoggerHelper;

/**
 * 微信支付回调服务
 * @package App\Services
 */
class WxPayNotifyService extends \App\Libraries\WeChatPay\WxPayNotify {

    /**
     * @var \Phalcon\Di
     */
    private $di;

    /**
     * 构造函数
     * @param $di \Phalcon\Di
     */
    function __construct($di) {
        $this->di = $di;
    }

    /**
     * 重写回调方法入口
     * 注意：
     * 1、微信回调超时时间为2s，建议用户使用异步处理流程，确认成功之后立刻回复微信服务器
     * 2、微信服务器在调用失败或者接到回包为非确认包的时候，会发起重试，需确保你的回调是可以重入
     * @param array $data 回调解释出的参数
     * @param string $msg 如果回调处理失败，可以将错误信息输出到该方法
     * @return true回调出来完成不需要继续回调，false回调处理未完成需要继续回调
     */
    public function NotifyProcess($data, &$msg) {
        //TODO 用户基础该类之后需要重写该方法，成功的时候返回true，失败返回false
        $outTradeNo = $data["out_trade_no"]; //商户订单号
        $tradeNo = $data["transaction_id"]; //微信支付订单号
        $tradeAmount = $data["total_fee"] / 100; // 总金额
        $timeEnd = $data["time_end"];   // 支付完成时间
        $tradeStatus = $data["result_code"] == "SUCCESS" ? 1 : -1;  //业务结果
        /**
         * @var \App\Interfaces\Strategies\IOrderStrategy $orderStrategy 订单策略
         */
        $orderStrategy = $this->di->get("order");
        $result = $orderStrategy->doTradeFinishedOrder($outTradeNo, $tradeStatus, $tradeAmount, $tradeNo, 'WeiXinPay', $timeEnd);
        LoggerHelper::info("微信支付回调服务 执行" . ($result ? "成功" : "失败"));
        return $result;
    }
}